package com.wfc.libcommon;

import android.app.Application;

import java.lang.reflect.InvocationTargetException;

/***
 * 这种方式获取全局的Application 是一种拓展思路。
 * 对于组件化项目，不可能把项目实际的Application 下沉到各个module,也不需要知道Application的真实名字
 *
 * 这种一次反射就能获取全局Application对象的方式，相比较于在Application#OnCreate保存一份的方式显示更加通用了
 *
 * 获取全局的Application 是通过反射的这个方法： ActivityThread类的 currentApplication 方法
 *  Application currentApplication()
 */


public class AppGlobals {

    private static Application sApplication;

    public static Application getApplication(){
        if(sApplication==null){
            try {
                sApplication = (Application) Class.forName("android.app.ActivityThread")
                        .getMethod("currentApplication")
                        .invoke(null, (Object[]) null);
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            } catch (InvocationTargetException e) {
                throw new RuntimeException(e);
            } catch (NoSuchMethodException e) {
                throw new RuntimeException(e);
            } catch (ClassNotFoundException e) {
                throw new RuntimeException(e);
            }

        }
        return sApplication;

    }


}
